<?php

class SqlCrud {

    private $tabela;

    public function setTabela($tabela) {
        $this->tabela = $tabela;
    }

    public function executa($usuario = false) {
        if ($usuario) {
            $sql = "SELECT 
                " . $this->tabela . ".*,
                usuarios.usuario
                FROM 
                " . $this->tabela . "
                JOIN usuarios ON usuarios.id_usuarios = " . $this->tabela . ".id_usuarios
                WHERE 1=1 ";
        } else {
            $sql = "SELECT * FROM " . $this->tabela . " WHERE 1=1";
        }
        try {
            $pdo = Conexao::open('site');
            $consulta = $pdo->prepare($sql);
            $consulta->execute();
            return $consulta->fetchAll(PDO::FETCH_ASSOC);
        } catch (PDOException $e) {
            new Excecao($e);
        }
    }

    public function executaSql($sql, $params = false) {
        try {
            $pdo = Conexao::open('site');
            $consulta = $pdo->prepare($sql);
            if (is_array($params)) {
                foreach ($params as $key => $val) {
                    $consulta->bindParam(":" . $key, $val['valor'], $val['pdotype']);
                }
            }
            $consulta->execute();
            return $consulta->fetchAll(PDO::FETCH_ASSOC);
        } catch (PDOException $e) {
            new Excecao($e);
        }
    }
    public function executaSqlAction($sql, $params = false) {
        try {
            $pdo = Conexao::open('site');
            $consulta = $pdo->prepare($sql);
            if (is_array($params)) {
                foreach ($params as $key => $val) {
                    $consulta->bindParam(":" . $key, $val['valor'], $val['pdotype']);
                }
            }
            $consulta->execute();
            return true;
        } catch (PDOException $e) {
            new Excecao($e);
            return false;
        }
    }

    public function excluirPadrao() {
        $retorno = array();
        $dados = $_POST;
        $tabela = $dados['form'];
        $CampoId = "id_" . $tabela;
        $id = $dados['id_form'];
        $sql = "DELETE FROM " . $tabela . " WHERE " . $CampoId . " = :id_form";
        try {
            $pdo = Conexao::open('site'); // inicia conexao
            $consulta = $pdo->prepare($sql);
            $consulta->bindParam(':id_form', $id, PDO::PARAM_INT);
            $consulta->execute();
            $retorno['resultado'] = 'sim';
        } catch (PDOException $e) {
            new Excecao($e);
            $retorno['resultado'] = 'erro';
            $retorno['erro'] = 'excluir';
        }

        return json_encode($retorno);
    }
    
    public function ativaDesativaPadrao($active = 0) {
        $retorno = array();
        $dados = $_POST;
        $tabela = $dados['form'];
        $CampoId = "id_" . $tabela;
        $id = $dados['id_form'];
        $sql = "UPDATE " . $tabela . " SET ativo= '". $active . "' " ." WHERE " . $CampoId . " = :id_form";
        try {
            $pdo = Conexao::open('site'); // inicia conexao
            $consulta = $pdo->prepare($sql);
            $consulta->bindParam(':id_form', $id, PDO::PARAM_INT);
            $consulta->execute();
            $retorno['resultado'] = 'sim';
        } catch (PDOException $e) {
            new Excecao($e);
            $retorno['resultado'] = 'erro';
            $retorno['erro'] = 'ativo';
        }

        return json_encode($retorno);
    }

    public function inserirPadrao() {
        $trataDados = new TrataDados();
        $trataDados->pegaDados();
        $tabela = $trataDados->getTabela();
        $dados = $trataDados->getDados();
        $campos = "";
        $values = "";
        $arrCampos = array_keys($dados);
        $campos = implode(", ", $arrCampos);
        foreach ($arrCampos as $value) {
            $inserValues[] = "'" . $dados[$value] . "'";
        }
        $values = implode(", ", $inserValues);
        $sql = "INSERT INTO " . $tabela . " (" . $campos . ") VALUES (" . $values . ")";
        try {
            $pdo = Conexao::open('site');
            $consulta = $pdo->prepare($sql);
            $consulta->execute();
            $retorno['resultado'] = 'sim';
        } catch (PDOException $e) {
            new Excecao($e);
            $retorno['resultado'] = 'erro';
            $retorno['erro'] = 'excluir';
        }
        return json_encode($retorno);
    }

    public function editarPadrao() {
        $trataDados = new TrataDados();
        $trataDados->pegaDados();
        $tabela = $trataDados->getTabela();
        $dados = $trataDados->getDados();
        $id_tabela = $dados['id_' . $tabela];
        $camposSet = array();
        foreach ($dados as $key => $val) {
            if ($key != 'repita') {
                $camposSet[] = "`" . $key . "` = '" . $val . "'";
            }
        }
        $sql = "UPDATE " . $tabela . " SET " . implode(', ', $camposSet) . " WHERE `id_" . $tabela . "` = " . $id_tabela . " LIMIT 1";

        try {
            $pdo = Conexao::open('site');
            $consulta = $pdo->prepare($sql);
            $consulta->execute();
            $retorno['resultado'] = 'sim';
        } catch (PDOException $e) {
            new Excecao($e);
            $retorno['resultado'] = 'erro';
            $retorno['erro'] = 'editar';
        }
        return json_encode($retorno);
    }

}
